package com.heima.wemedia.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.apis.article.IArticleClient;
import com.heima.model.article.pojos.ApArticle;
import com.heima.model.common.dtos.PageResponseResult;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.wemedia.dtos.StatisticsDto;
import com.heima.model.wemedia.pojos.WmUser;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.wemedia.vos.NewsDimensionVo;

import com.heima.utils.common.DateUtils;
import com.heima.utils.thread.ApUserThreadLocalUtil;
import com.heima.utils.thread.WmThreadLocalUtil;
import com.heima.wemedia.mapper.WmCountMapper;
import com.heima.wemedia.service.WmCountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class WmCountServiceImpl extends ServiceImpl<WmCountMapper, ApArticle> implements WmCountService {
    @Autowired
    private IArticleClient iArticleClient;

    @Autowired
    private WmCountMapper wmCountMapper;
    @Autowired
    private IArticleClient articleClient;


    /**
     * 统计点赞，收藏，发布数量
     *
     * @param
     * @return
     */
    @Override
    public ResponseResult countNum(String beginDate, String endDate) {
        Map<String, Object> resultMap = new HashMap<>();

        //类型转换   字符串转换为date类型
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate beginDateTime = LocalDate.parse(beginDate, fmt);
        LocalDate endDateTime = LocalDate.parse(endDate, fmt);

        //开始时间为一天内最小的时间，结束时间为一天内最大的时间
        LocalDateTime beginTime = LocalDateTime.of(beginDateTime, LocalTime.MIN);
        LocalDateTime endTime = LocalDateTime.of(endDateTime, LocalTime.MAX);


        //根据作者id查询到他的文章集合
        Integer authorId = WmThreadLocalUtil.getUser().getId();
        ResponseResult responseResult = iArticleClient.queryLikesAndConllections(authorId, beginTime, endTime);
        if (responseResult.getCode().equals(200)) {
            String res_json = JSON.toJSONString(responseResult.getData());
            Map map = JSON.parseObject(res_json, Map.class);
            resultMap.put("likesNum", map.get("likes") == null ? 0 : map.get("likes"));
            resultMap.put("collectNum", map.get("collections") == null ? 0 : map.get("collections"));
            resultMap.put("publishNum", map.get("newsCount") == null ? 0 : map.get("newsCount"));
        }
        return ResponseResult.okResult(resultMap);
    }


    /**
     * 分页查询新闻数据
     *
     * @param beginDate 开始日期，格式为"yyyy-MM-dd"，表示查询的新闻数据的开始日期。
     * @param endDate   结束日期，格式为"yyyy-MM-dd"，表示查询的新闻数据的结束日期。
     * @param page      当前页码，表示查询的结果的页码数。
     * @param size      每页显示条数，表示每页显示的新闻数据数量。
     * @return 分页结果，包含新闻数据列表和总记录数。
     */
    public PageResponseResult newsPage(String beginDate, String endDate, Integer page, Integer size) {
        // 从当前线程中获取登录用户信息
        WmUser user = WmThreadLocalUtil.getUser();

        // 创建 StatisticsDto 对象并设置查询条件
        StatisticsDto statisticsDto = new StatisticsDto();
        statisticsDto.setEndDate(endDate);
        statisticsDto.setBeginDate(beginDate);
        statisticsDto.setPage(page);
        statisticsDto.setSize(size);
        statisticsDto.setUser(user);

        // 调用 articleClient 的 newPage 方法，向文章服务请求分页查询新闻数据
        return articleClient.newPage(statisticsDto);
    }
}
